home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 29 / CDT29.iso / e-Mail / WorldClient Pro 2.2.3 / wcsetup.exe / WEBHELP.ZIP / hhapplet / FTSSearcher.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-10-21  |  4.8 KB  |  405 lines

  1. package hhapplet;
  2.  
  3. import java.applet.Applet;
  4. import java.awt.List;
  5.  
  6. public class FTSSearcher {
  7.    protected Applet m_applet;
  8.    protected int m_nTopicCount = 0;
  9.    protected int m_nKeywordCount = 0;
  10.    protected int m_nStopWordCount = 0;
  11.    protected TopicData[] m_tdTopics;
  12.    protected KeywordData[] m_kdKeywords;
  13.    protected String[] m_strStopWords;
  14.    protected int[] m_aryTopicsFound;
  15.    protected int m_nTopicsFoundCount = 0;
  16.    protected FTSPane m_spSearch = null;
  17.    public List m_lst = null;
  18.    public SearchTree m_searchtree = null;
  19.  
  20.    public String getTopicURL(String var1) {
  21.       for(int var2 = 0; var2 < this.m_nTopicsFoundCount; ++var2) {
  22.          if (this.m_tdTopics[this.m_aryTopicsFound[var2]].m_strTitle.compareTo(var1) == 0) {
  23.             return this.m_tdTopics[this.m_aryTopicsFound[var2]].m_urlTopic;
  24.          }
  25.       }
  26.  
  27.       return "";
  28.    }
  29.  
  30.    public boolean setTopicData(int var1, String var2, String var3) {
  31.       if (var1 >= 0 && var1 < this.m_nTopicCount) {
  32.          this.m_tdTopics[var1] = new TopicData(this);
  33.          this.m_tdTopics[var1].m_strTitle = var2;
  34.          this.m_tdTopics[var1].m_urlTopic = var3;
  35.          return true;
  36.       } else {
  37.          return false;
  38.       }
  39.    }
  40.  
  41.    public int getKeywordCount() {
  42.       return this.m_nKeywordCount;
  43.    }
  44.  
  45.    public int setKeywordCount(int var1) {
  46.       this.m_kdKeywords = new KeywordData[var1];
  47.       this.m_nKeywordCount = var1;
  48.       return this.m_nKeywordCount;
  49.    }
  50.  
  51.    public int getStopWordCount() {
  52.       return this.m_nStopWordCount;
  53.    }
  54.  
  55.    public int setStopWordCount(int var1) {
  56.       this.m_strStopWords = new String[var1];
  57.       this.m_nStopWordCount = var1;
  58.       return this.m_nStopWordCount;
  59.    }
  60.  
  61.    public FTSSearcher(Applet var1) {
  62.       this.m_applet = var1;
  63.    }
  64.  
  65.    public void setPane(FTSPane var1) {
  66.       this.m_spSearch = var1;
  67.    }
  68.  
  69.    public int getTopicCount() {
  70.       return this.m_nTopicCount;
  71.    }
  72.  
  73.    public int setTopicCount(int var1) {
  74.       this.m_tdTopics = new TopicData[var1];
  75.       this.m_nTopicCount = var1;
  76.       this.m_aryTopicsFound = new int[this.m_nTopicCount];
  77.       return this.m_nTopicCount;
  78.    }
  79.  
  80.    private void SortTopics(int[] var1, int var2, int var3) {
  81.       if (var3 - var2 > 0) {
  82.          int var5 = var2;
  83.  
  84.          for(int var6 = var2 + 1; var6 <= var3; ++var6) {
  85.             TopicData var7 = this.m_tdTopics[var1[var6]];
  86.             String var8 = var7.m_strTitle;
  87.             TopicData var9 = this.m_tdTopics[var1[var2]];
  88.             String var10 = var9.m_strTitle;
  89.             if (var8.compareTo(var10) < 0) {
  90.                ++var5;
  91.                int var4 = var1[var6];
  92.                var1[var6] = var1[var5];
  93.                var1[var5] = var4;
  94.             }
  95.          }
  96.  
  97.          int var11 = var1[var2];
  98.          var1[var2] = var1[var5];
  99.          var1[var5] = var11;
  100.          this.SortTopics(var1, var2, var5);
  101.          this.SortTopics(var1, var5 + 1, var3);
  102.       }
  103.  
  104.    }
  105.  
  106.    public boolean doSearch(String var1, List var2, SearchTree var3) {
  107.       boolean var4 = false;
  108.       boolean var5 = false;
  109.       boolean var6 = false;
  110.       boolean var7 = true;
  111.       String var8 = "";
  112.       String var9 = "";
  113.       int var10 = 0;
  114.       int var11 = 0;
  115.       int var12 = 0;
  116.       int var13 = 0;
  117.       int var14 = 0;
  118.       this.m_spSearch.HideList();
  119.       this.m_lst = var2;
  120.       this.m_searchtree = var3;
  121.       if (this.m_lst != null && this.m_lst.countItems() > 0) {
  122.          this.m_lst.clear();
  123.       }
  124.  
  125.       if (this.m_searchtree != null && this.m_searchtree.countItems() > 0) {
  126.          this.m_searchtree.clear();
  127.       }
  128.  
  129.       this.m_nTopicsFoundCount = 0;
  130.       String var15 = "\t\r\n\"\\ .,!@#$%^&*()~'`:;<>?/{}[]|+-=";
  131.       int var16 = var15.length();
  132.  
  133.       while(!var6 && var1.length() != 0) {
  134.          var10 = -1;
  135.  
  136.          for(int var17 = 0; var17 < var16 && var10 == -1; ++var17) {
  137.             var10 = var1.indexOf(var15.charAt(var17));
  138.          }
  139.  
  140.          if (var10 == -1) {
  141.             var8 = var1;
  142.             var1 = "";
  143.          } else {
  144.             var8 = var1.substring(0, var10);
  145.             if (var1.charAt(var10) == '~') {
  146.                var5 = true;
  147.             }
  148.  
  149.             var1 = var1.substring(var10 + 1);
  150.          }
  151.  
  152.          if (var8.length() == 0) {
  153.             if (var1.length() == 0) {
  154.                break;
  155.             }
  156.          } else if (!var8.equalsIgnoreCase("or") && var8.compareTo("|") != 0) {
  157.             if (!var8.equalsIgnoreCase("and") && var8.compareTo("&") != 0) {
  158.                if (!var8.equalsIgnoreCase("not") && var8.compareTo("~") != 0) {
  159.                   if (!this.IsStopWord(var8)) {
  160.                      if (var8.substring(0, 1) == "~") {
  161.                         var5 = true;
  162.                         var8 = var8.substring(1);
  163.                      }
  164.  
  165.                      var9 = this.GetStem(var8);
  166.                      var11 = (boolean)-1;
  167.                      var11 = this.FindKeyword(var9);
  168.                      if (var11 != -1) {
  169.                         int var34 = this.m_kdKeywords[var11].m_aryTopicLinks.length;
  170.                         if (!var4) {
  171.                            if (var5) {
  172.                               for(int var28 = 0; var28 < this.m_nTopicCount; ++var28) {
  173.                                  for(var14 = 0; var14 < var34 && this.m_kdKeywords[var11].m_aryTopicLinks[var14] != var28; ++var14) {
  174.                                  }
  175.  
  176.                                  if (var14 == var34) {
  177.                                     for(var12 = 0; var12 < this.m_nTopicsFoundCount && this.m_aryTopicsFound[var12] != var28; ++var12) {
  178.                                     }
  179.  
  180.                                     if (var12 == this.m_nTopicsFoundCount) {
  181.                                        this.m_aryTopicsFound[this.m_nTopicsFoundCount] = var28;
  182.                                        ++this.m_nTopicsFoundCount;
  183.                                     }
  184.                                  }
  185.                               }
  186.                            } else {
  187.                               for(int var29 = 0; var29 < var34; ++var29) {
  188.                                  int var18 = this.m_kdKeywords[var11].m_aryTopicLinks[var29];
  189.  
  190.                                  for(var12 = 0; var12 < this.m_nTopicsFoundCount && this.m_aryTopicsFound[var12] != var18; ++var12) {
  191.                                  }
  192.  
  193.                                  if (var12 == this.m_nTopicsFoundCount) {
  194.                                     this.m_aryTopicsFound[this.m_nTopicsFoundCount] = var18;
  195.                                     ++this.m_nTopicsFoundCount;
  196.                                  }
  197.                               }
  198.                            }
  199.                         } else if (var4) {
  200.                            if (var5) {
  201.                               for(int var30 = 0; var30 < var34; ++var30) {
  202.                                  for(int var26 = this.m_nTopicsFoundCount - 1; var26 >= 0; --var26) {
  203.                                     if (this.m_aryTopicsFound[var26] == this.m_kdKeywords[var11].m_aryTopicLinks[var30]) {
  204.                                        if (this.m_nTopicsFoundCount > 0) {
  205.                                           this.m_aryTopicsFound[var26] = this.m_aryTopicsFound[this.m_nTopicsFoundCount - 1];
  206.                                        }
  207.  
  208.                                        this.m_nTopicsFoundCount += -1;
  209.                                        break;
  210.                                     }
  211.                                  }
  212.                               }
  213.                            } else {
  214.                               for(int var27 = this.m_nTopicsFoundCount - 1; var27 >= 0; --var27) {
  215.                                  for(var13 = 0; var13 < var34 && this.m_aryTopicsFound[var27] != this.m_kdKeywords[var11].m_aryTopicLinks[var13]; ++var13) {
  216.                                  }
  217.  
  218.                                  if (var13 == var34) {
  219.                                     if (this.m_nTopicsFoundCount > 0) {
  220.                                        this.m_aryTopicsFound[var27] = this.m_aryTopicsFound[this.m_nTopicsFoundCount - 1];
  221.                                     }
  222.  
  223.                                     this.m_nTopicsFoundCount += -1;
  224.                                  }
  225.                               }
  226.                            }
  227.                         }
  228.                      } else if (var4 && !var5) {
  229.                         this.m_nTopicsFoundCount = 0;
  230.                      } else if (!var4 && var5) {
  231.                         this.m_nTopicsFoundCount = 0;
  232.  
  233.                         for(int var32 = 0; var32 < this.m_nTopicCount; ++var32) {
  234.                            this.m_aryTopicsFound[this.m_nTopicsFoundCount] = var32;
  235.                            ++this.m_nTopicsFoundCount;
  236.                         }
  237.                      }
  238.  
  239.                      if (var7) {
  240.                         var7 = false;
  241.                         var4 = true;
  242.                      }
  243.                   }
  244.                } else {
  245.                   var5 = true;
  246.                }
  247.             } else {
  248.                var4 = true;
  249.                var5 = false;
  250.             }
  251.          } else {
  252.             var4 = false;
  253.             var5 = false;
  254.          }
  255.       }
  256.  
  257.       this.SortTopics(this.m_aryTopicsFound, 0, this.m_nTopicsFoundCount - 1);
  258.       if (this.m_lst != null) {
  259.          for(int var35 = 0; var35 < this.m_nTopicsFoundCount; ++var35) {
  260.             this.m_lst.addItem(this.m_tdTopics[this.m_aryTopicsFound[var35]].m_strTitle);
  261.          }
  262.       }
  263.  
  264.       if (this.m_searchtree != null) {
  265.          for(int var36 = 0; var36 < this.m_nTopicsFoundCount; ++var36) {
  266.             this.m_searchtree.addItem(this.m_tdTopics[this.m_aryTopicsFound[var36]].m_strTitle);
  267.          }
  268.       }
  269.  
  270.       this.m_spSearch.ShowList();
  271.       if (this.m_searchtree != null) {
  272.          this.m_searchtree.paint(this.m_searchtree.getGraphics());
  273.       }
  274.  
  275.       if (this.m_nTopicsFoundCount == 0) {
  276.          if (this.m_lst != null) {
  277.             this.m_lst.addItem("No Topics Found.");
  278.          }
  279.  
  280.          if (this.m_searchtree != null) {
  281.             this.m_searchtree.addItem("No Topics Found.");
  282.          }
  283.  
  284.          if (this.m_searchtree != null) {
  285.             this.m_searchtree.paint(this.m_searchtree.getGraphics());
  286.          }
  287.  
  288.          return false;
  289.       } else {
  290.          return true;
  291.       }
  292.    }
  293.  
  294.    public boolean setStopWord(int var1, String var2) {
  295.       if (var1 >= 0 && var1 < this.m_nStopWordCount) {
  296.          if (var2 == null) {
  297.             this.m_strStopWords[var1] = null;
  298.          } else {
  299.             this.m_strStopWords[var1] = var2.toLowerCase();
  300.          }
  301.  
  302.          return true;
  303.       } else {
  304.          return false;
  305.       }
  306.    }
  307.  
  308.    private int FindKeyword(String var1) {
  309.       int var2 = 0;
  310.       int var3 = this.m_nKeywordCount - 1;
  311.       int var4 = 0;
  312.       boolean var5 = false;
  313.       String var6 = "";
  314.       var1 = var1.toLowerCase();
  315.  
  316.       while(var2 <= var3) {
  317.          int var8 = var2 + var3;
  318.          var4 = var8 >> 1;
  319.          var6 = this.m_kdKeywords[var4].m_strKeyword;
  320.          if (var1.compareTo(var6) > 0) {
  321.             var2 = var2 == var4 ? var4 + 1 : var4;
  322.          } else {
  323.             if (var1.compareTo(var6) >= 0) {
  324.                var5 = true;
  325.                break;
  326.             }
  327.  
  328.             var3 = var3 == var4 ? var4 - 1 : var4;
  329.          }
  330.       }
  331.  
  332.       return var5 ? var4 : -1;
  333.    }
  334.  
  335.    public boolean setKeywordData(int var1, String var2, int[] var3) {
  336.       if (var1 >= 0 && var1 < this.m_nKeywordCount) {
  337.          this.m_kdKeywords[var1] = new KeywordData(this);
  338.          if (var2 == null) {
  339.             this.m_kdKeywords[var1].m_strKeyword = null;
  340.          } else {
  341.             this.m_kdKeywords[var1].m_strKeyword = var2.toLowerCase();
  342.          }
  343.  
  344.          this.m_kdKeywords[var1].m_aryTopicLinks = var3;
  345.          return true;
  346.       } else {
  347.          return false;
  348.       }
  349.    }
  350.  
  351.    private String GetStem(String var1) {
  352.       String[] var2 = new String[]{"ed", "es", "er", "s", "ingly", "ing", "ly", "e"};
  353.       int var3 = var2.length;
  354.       int var4 = 0;
  355.       String var5 = "";
  356.       String var6 = "";
  357.       var1 = var1.toLowerCase();
  358.  
  359.       for(int var7 = 0; var7 < var3; ++var7) {
  360.          var4 = var1.lastIndexOf(var2[var7]);
  361.          if (var4 > 0) {
  362.             var6 = var1.substring(var4);
  363.             if (var6.compareTo(var2[var7]) == 0) {
  364.                if (var1.charAt(var4 - 2) == var1.charAt(var4 - 1)) {
  365.                   var5 = var1.substring(0, var4 - 1);
  366.                } else {
  367.                   var5 = var1.substring(0, var4);
  368.                }
  369.  
  370.                return var5;
  371.             }
  372.          }
  373.       }
  374.  
  375.       return var1;
  376.    }
  377.  
  378.    private boolean IsStopWord(String var1) {
  379.       int var2 = 0;
  380.       int var3 = this.m_nStopWordCount - 1;
  381.       int var4 = 0;
  382.       boolean var5 = false;
  383.       Object var6 = null;
  384.       var1.toLowerCase();
  385.  
  386.       while(var2 <= var3) {
  387.          var4 = var2 + var3;
  388.          var4 >>= 1;
  389.          String var9 = this.m_strStopWords[var4];
  390.          if (var1.compareTo(var9) > 0) {
  391.             var2 = var2 == var4 ? var4 + 1 : var4;
  392.          } else {
  393.             if (var1.compareTo(var9) >= 0) {
  394.                var5 = true;
  395.                break;
  396.             }
  397.  
  398.             var3 = var3 == var4 ? var4 - 1 : var4;
  399.          }
  400.       }
  401.  
  402.       return var5;
  403.    }
  404. }
  405.